import axios from "axios";
import { Local } from '@/until/storage'
class HttpRequest {
  constructor(baseURL = '') {
  //创建一个axios实例
    this.instance = axios.create({
        baseURL,
        withCredentials: false,  //是否允许跨域
        timeout: 1000 * 30, //请求超时时间
        isErrorHandle: false, //是否开启全局错误响应提示，默认关闭
    });

//请求拦截器：在请求发送前进行必要操作处理
    this.instance.interceptors.request.use((config) => { 
        const { headers, method, params, data } =config;
        if(!headers["content-type"]) { // 如果没有设置请求头
            if(method === 'post') {
                // headers["content-type"] = "application/x-www-form-urlencoded"; // post 请求
                // if(config.url.indexOf("getStEchartData") >= 0 || config.url.indexOf("getOrgQueryListTree") >= 0 || config.url.indexOf("getList") >= 0){
                //   headers["content-type"] = "application/json"; 
                // }else{
                //   headers["content-type"] = "application/x-www-form-urlencoded"; 
                // }
                let token = Local.get("token")
                headers["content-type"] = "application/json"; 
                headers['token'] = token;
                // data = qs.stringify(config.data); // 序列化,比如表单数据
            } else {
                headers["content-type"] = "application/json"; // 默认类型
            }
        }
        return config;
    }, (error) => {
       // 处理响应错误
       return Promise.reject(error);
    });
  
    // 响应拦截器：请求得到响应之后，对响应体的一些处理
    this.instance.interceptors.response.use( (response) => {
        const { status, data } = response;
        // 正常响应
        if(status === 200 || (status < 300 || status === 304)) {
            return Promise.resolve(data);
        }
        // 返回数据
        return Promise.reject(data);
    },  (error) => {
      // 处理响应错误
      return Promise.reject(error);
    });
  }
  //当响应拦截之后，axios就不能请求到数据了 打印出来是undefined 
  //拦截完数据后，可以返回出我想要的数据
  //比如说我只要拿到data数据，就可以return res.data
  //request get post 都是axios里自带的方法，下面不配置也行（？）

  request(config) {
    return new Promise((resolve, reject) => {
      this.instance.request(config).then((res) => {
          resolve(res);
        }).catch((err) => {
          console.log("request err:", err);
          reject(err);
        }).finally(() => {
        });
    });
  }

  get(config) {
    return this.request({ ...config, method: "get" });
  }

  post(config) {
    return this.request({ ...config, method: "post" });
  }
}

export default HttpRequest;

